const mysql = require('mysql')

const jwt = require('jsonwebtoken')
const md5 = require('md5')

// 引入连接数据库配置信息
const db_config = require('../db/db')

// 创建连接池
const pool = mysql.createPool({...db_config,...{connectionLimit:10}});
  
  // 查询函数
  function query(sql, callback) {
    // 从连接池中获取一个连接
    pool.getConnection((err, connection) => {
      if (err) {
        callback(err, null);
      } else {
        // 执行查询
        connection.query(sql, (err, results) => {
          // 释放连接
          connection.release();
          callback(err, results);
        });
      }
    });
  }
  
  // 定时任务
    //这段代码是为了保持数据库连接处于活动状态，
    // 它会每隔5秒钟向数据库发送一个select 1的查询请求，确保连接不会因为长时间没有交互而被断开。
    // 这个技巧被称为“保活”，可以让长时间运行的应用程序保持稳定的连接状态。
  setInterval(() => {
    const sql = 'SELECT 1';
    query(sql, (err, results) => {
      if (err) {
        console.error(err);
      } else {
        // console.log('查询结果：', results);
      }
    });
  }, 5000);

const verifyToken = (req,res,next) => {
    // 获取请求中的token
    const token = req.headers["abletoken"]
    // 如果token不存在，则返回错误信息
    if (!token) {
         res.status(401).json({code:401,message:'未提供token'})
        return
    }
    try{
        // 验证token是否有效
        const decoded = jwt.verify(token,'able')
        // 将解码后的token信息保存到请求对象中
        req.user = decoded
    }catch(err){
         res.status(403).json({code:403,message:'token验证失败'})
         return
    }
}


// 获取列表
exports.getUserList = (req,res) =>{
    verifyToken(req,res)
    if (req.user) {
      let sql = 'select * from user'
      query(sql,(err,result) => {
        if (err) {
          return
        }else{
          res.json({code:200,message:'获取数据成功',data:result})
          return
        }
      })
    }
}




// 登录
exports.login = (req,res) =>{
  const { username, password } = req.body;
  // 判断是否有用户名密码
  if (!username || !password) {
    res.status(403).json({message:'用户名或密码不能为空'})
    return
  }else{

  }
  // md5加密password
  // const md5Pwd = md5(password)
  const md5Pwd = password
  // sql查询语言
  const sql = `select * from user where username ='${username}' and password='${md5Pwd}'`
  // sql查询
  query(sql,(err,result) => {
    if (err) {
      res.json({code:0,message:err})
      return
    }
    if (result.length === 0) {
      res.status(401).json({code:0,message:'用户名或密码错误'})
      return
    }else{
      const payload = {username:username}
      const secretKey = 'able'
      const tk = jwt.sign(payload,secretKey,{expiresIn:'1h'})
      res.status(200).json({code:200,message:'登录成功',token:tk})
      return
    }
  })
}